home *** CD-ROM | disk | FTP | other *** search
-
- COM41A EQU 041AH
- COM41C EQU 041CH
-
- DEVICEHEADER STRUC
- NDEVICE DD -1 ; 0
- ATTRIB DW 0 ; 4
- STRAG DW 0 ; 6
- INTER DW 0 ; 8
- NAME DB ' ' ; 10
- DEVICEHEADER ENDS ; 18
-
- REQUESTHEADER STRUC
- LENGTH DB
- UNITCOD DB
- COMMCOD DB
- STATUS DW
- RESERVE DB 8 DUP (0)
- REQUESTHEADER ENDS
-
- INITREQUEST STRUC
- DUMINIT DB SIZE REQUESTHEADER DUP (0)
- NUMUNIT DB
- DEVEND DD
- DEVBPB DD
- INITREQUEST ENDS
-
- IOREQUEST STRUC
- DUMIO DB SIZE REQUESTHEADER DUP (0)
- MEDIA DB
- DATAADR DD
- COUNT DW
- START DW
- IOREQUEST ENDS
-
- NDIREQUEST STRUC
- DUMNDI DB SIZE REQUESTHEADER DUP (0)
- DATAOUT DB
- NDIREQUEST ENDS
-
- TABLE STRUC
- DBYTE DB
- ADDR DW
- TABLE ENDS
-
- ANSIDRIVER SEGMENT PUBLIC PARA 'CODE'
- ASSUME CS:ANSIDRIVER,DS:ANSIDRIVER
-
- ANSIDEV DEVICEHEADER <,8013H,QUEUECALL,EXECUCALL,'CON '>
-
- COMMTBL DW INITPROC ; 0012 0609 0
- DW BADCOMMAND ; 0014 00DE 1
- DW BADCOMMAND ; 0016 00DE 2
- DW IOCTLINPUT ; 0018 00D8 3
- DW INPUTPROC ; 001A 01F6 4
- DW NDINPUTPROC ; 001C 0278 5
- DW BADCOMMAND ; 001E 00DE 6
- DW IFLUSHPROC ; 0020 02BC 7
- DW OUTPUTPROC ; 0022 02D8 8
- DW OUTPUTPROC ; 0024 02D8 9
- DW BADCOMMAND ; 0026 00DE 10
- DW BADCOMMAND ; 0028 00DE 11
-
- ; 2A
- TABLE <041H,DUMMY93>
- TABLE <042H,DUMMY87>
- TABLE <043H,DUMMY84>
- TABLE <044H,DUMMY85>
- TABLE <048H,DUMMY83>
- TABLE <04AH,DUMMY91>
- TABLE <04BH,DUMMY92>
- TABLE <052H,DUMMY38>
- TABLE <066H,DUMMY83>
- TABLE <068H,DUMMY97>
- L49 TABLE <06CH,DUMMY96>
- TABLE <06DH,DUMMY90>
- L4E TABLE <06EH,DUMMY94>
- TABLE <070H,DUMMY99>
- TABLE <073H,DUMMY95>
- TABLE <075H,DUMMY89>
-
- DB 000H,000H,000H
- DB 007H,001H,0FFH
- DB 008H,004H
- L62 DB 0F8H
- ; 63
- DB 001H,005H,0FFH,080H,007H
- DB 0F8H,070H,008H,088H,000H,01EH,0F8H,000H
- ; 70
- DB 01FH,0F8H,004H,020H,0F8H,002H,021H,0F8H
- DB 006H,022H,0F8H,001H,023H,0F8H,005H,024H
- ; 80
- DB 0F8H,003H,025H,0F8H,007H,028H,08FH,000H
- DB 029H,08FH,040H,02AH,08FH,020H,02BH,08FH
- ; 90
- DB 060H,02CH,08FH,010H,02DH,08FH,050H,02EH
- DB 08FH,030H,02FH,08FH,070H,0FFH
-
- REQADDR DD 0 ; 009E,00A0
-
- QUEUECALL PROC FAR
- MOV CS:WORD PTR REQADDR,BX
- MOV CS:WORD PTR REQADDR[2],ES
- RET
- QUEUECALL ENDP
-
- EXECUCALL PROC FAR
- PUSH SI
- PUSH AX
- PUSH CX
- PUSH DX
- PUSH DI
- PUSH BP
- PUSH DS
- PUSH ES
- PUSH BX
- LDS BX,CS:REQADDR
- MOV CX,[BX].COUNT
- MOV AL,[BX].COMMCOD
- CBW
- MOV SI,OFFSET COMMTBL ; 0012
- ADD SI,AX
- ADD SI,AX
- CMP AL,0BH
- JA IOCTLINPUT
- LES DI,[BX].DATAADR
- PUSH CS
- POP DS
- JMP WORD PTR [SI]
- DUMMY14:
- MOV AH,03H
- JMP SHORT RETURN
- IOCTLINPUT:
- MOV AL,03H
- MOV AH,81H
- JMP SHORT RETURN
- BADCOMMAND:
- MOV AH,01H
- RETURN:
- LDS BX,CS:REQADDR
- MOV [BX].STATUS,AX
- POP BX
- POP ES
- POP DS
- POP BP
- POP DI
- POP DX
- POP CX
- POP AX
- POP SI
- RET
- EXECUCALL ENDP
-
- KEYBREAK:
- MOV CS:L114,03H
- IRET
-
- LFA DB 0H
- LFB DW 4H
- LFD DW DUMMY18
- LFF DB 3H
- MAXCOL DB 4FH
- COL DB 0H
- ROW DB 0H
- L103 DW 0H
- L105 DB 0H
- L106 DW 0H
- L108 DB 0H
- L109 DW KBDTABLE
- L10B DB 1BH,5BH
- L10D DW 3030H
- DB 3BH
- L110 DW 3030H
- DB 52H,0DH
- L114 DB 0H
- FGNDCLR DB 7H
- DPAGE DB 0H
- VIDEOB DW 0B800H
- L119 DW 0H
-
- DUMMY56:
- CMP AL,0DH
- JNZ NOCR
- MOV COL,00H
- JMP SHORT CONT
- NOCR:
- CMP AL,0AH
- JZ DOLF
- CMP AL,07H
- JNZ NOBEL
- OUTCHR: MOV BX,WORD PTR FGNDCLR
- AND BL,07H
- MOV AH,0EH
- INT 10H
- GORET: RET
-
- NOBEL: CMP AL,08H
- JNZ NOBS
- CMP COL,00H
- JZ GORET
- DEC COL
- JMP SHORT CONT
- NOBS: MOV BX,WORD PTR FGNDCLR
- MOV CX,1H
- MOV AH,09H
- INT 10H
- INC COL
- MOV AL,COL
- CMP AL,MAXCOL
- JBE CONT
- CMP LFA,00H
- JZ CLRROW
- DEC COL
- RET
- CLRROW: MOV COL,00H
- DOLF: INC ROW
- CMP ROW,19H
- JB CONT
- MOV ROW,18H
- CALL DUMMY50
- CONT: MOV DH,ROW
- MOV DL,COL
- MOV BH,DPAGE
- MOV AH,02H
- INT 10H
- RET
-
- DUMMY50:
- MOV AL,LFF
- CMP AL,02H
- JE NOAUTO
- CMP AL,03H
- JE NOAUTO
- MOV AL,0AH
- JMP OUTCHR
- NOAUTO:
- MOV BH,FGNDCLR
- MOV BL,20H
- MOV BP,50H
- MOV AX,VIDEOB
- ADD AX,L119
- MOV ES,AX
- MOV DS,AX
- XOR DI,DI
- MOV SI,0A0H
- MOV CX,780H
- CLD
- CMP CS:VIDEOB,0B800H
- JZ WAITCOLOR
- REP MOVSW
- MOV AX,BX
- MOV CX,BP
- REP STOSW
- GORET1:
- PUSH CS
- POP DS
- RET
- WAITCOLOR:
- MOV DX,03DAH
- LP1: IN AL,DX
- TEST AL,08H
- JZ LP1
- MOV AL,25H
- MOV DX,03D8H
- OUT DX,AL
- REP MOVSW
- MOV AX,BX
- MOV CX,BP
- REP STOSW
- MOV AL,29H
- MOV DX,03D8H
- OUT DX,AL
- JMP GORET1
- INPUTPROC:
- JCXZ NOCHARS
- LP3: PUSH CX
- CALL DUMMY51
- POP CX
- STOSB
- LOOP LP3
- NOCHARS:
- JMP BADCOMMAND
- DUMMY51:
- XOR AX,AX
- XCHG L114,AL
- OR AL,AL
- JNZ GORET3
- DUMMY4:
- CMP L108,00H
- JNZ DUMMY1
- XOR AH,AH
- INT 16H
- CALL DUMMY52
- JNZ DUMMY2
- DEC CX
- DEC CX
- INC BX
- INC BX
- OR AL,AL
- JNZ DUMMY3
- DEC CX
- INC BX
- DUMMY3:
- MOV L108,CL
- MOV L109,BX
- CALL DUMMY1
- DUMMY2:
- OR AX,AX
- JZ DUMMY4
- OR AL,AL
- JNZ GORET3
- MOV L114,AH
- GORET3: RET
- DUMMY1:
- MOV BX,L109
- MOV AX,[BX]
- DEC L108
- INC BX
- OR AL,AL
- JNZ DUMMY5
- INC BX
- DEC L108
- DUMMY5:
- MOV L109,BX
- RET
- DUMMY52:
- MOV BX,OFFSET KBDTABLE
- DUMMY9:
- MOV CL,[BX]
- XOR CH,CH
- OR CX,CX
- JZ DUMMY6
- OR AL,AL
- JNZ DUMMY7
- CMP AX,[BX+01]
- JMP SHORT DUMMY8
- DUMMY7:
- CMP AL,[BX+01]
- DUMMY8:
- JZ GORET4
- ADD BX,CX
- JMP DUMMY9
- DUMMY6:
- OR BX,BX
- GORET4: RET
- NDINPUTPROC:
- MOV AL,L114
- OR AL,AL
- JNZ DUMMY10
- CMP L108,00H
- JZ DUMMY11
- MOV BX,L109
- MOV AL,[BX]
- JMP SHORT DUMMY10
- DUMMY11:
- MOV AH,01H
- INT 16H
- JZ DUMMY12
- OR AX,AX
- JNZ DUMMY13
- MOV AH,00H
- INT 16H
- JMP NDINPUTPROC
- DUMMY13:
- CALL DUMMY52
- JNZ DUMMY10
- MOV AL,[BX+02]
- CMP BYTE PTR [BX+01],00
- JNZ DUMMY10
- MOV AL,[BX+03]
- DUMMY10:
- LDS BX,REQADDR
- MOV [BX].DATAOUT,AL
- DUMMY15:
- JMP BADCOMMAND
- DUMMY12:
- JMP DUMMY14
- IFLUSHPROC:
- MOV L114,00H
- MOV L108,00H
- PUSH DS
- XOR BP,BP
- MOV DS,BP
- MOV BYTE PTR ANSIDEV[COM41A],1EH ; Bad fake of MASM
- MOV BYTE PTR ANSIDEV[COM41C],1EH
- POP DS
- JMP DUMMY15
-
- OUTPUTPROC:
- JCXZ DUMMY15
- LP2: MOV AL,ES:[DI]
- INC DI
- CALL DUMMY53
- LOOP LP2
- JMP DUMMY15
- DUMMY74:
- STI
- PUSH DS
- PUSH CS
- POP DS
- CALL DUMMY53
- POP DS
- IRET
- DUMMY53:
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH SI
- PUSH DI
- PUSH ES
- PUSH BP
- MOV VIDEOB,0B800H
- XCHG SI,AX
- MOV AX,0040H
- MOV DS,AX
- MOV AX,L49.ADDR
- DEC AH
- MOV WORD PTR CS:LFF,AX
- CMP AL,07H
- JNZ DUMMY16
- MOV CS:VIDEOB,0B000H
- DUMMY16:
- MOV AL,L62
- MOV CS:DPAGE,AL
- CBW
- ADD AX,AX
- MOV BX,AX
- MOV AX,[BX+50H]
- MOV WORD PTR CS:COL,AX
- MOV AX,WORD PTR L4E
- MOV CL,04H
- SHR AX,CL
- PUSH CS
- POP DS
- MOV L119,AX
- XCHG SI,AX
- CALL DUMMY54
- POP BP
- POP ES
- POP DI
- POP SI
- POP DX
- POP CX
- POP BX
- POP AX
- RET
- DUMMY54:
- MOV SI,OFFSET LFD
- JMP WORD PTR [SI]
- DUMMY72:
- CMP AL,5BH
- JZ DUMMY17
- JMP DUMMY18
- DUMMY17:
- MOV WORD PTR [SI],OFFSET DUMMY70
- XOR BX,BX
- MOV WORD PTR L105,BX
- JMP SHORT DUMMY19
- DUMMY70:
- CMP AL,03BH
- JNZ DUMMY20
- DUMMY25:
- INC BYTE PTR L106
- DUMMY19:
- CALL DUMMY43
- XOR AX,AX
- MOV [BX],AX
- RET
- DUMMY20:
- CMP AL,30H
- JB DUMMY21
- CMP AL,39H
- JA DUMMY21
- CALL DUMMY43
- SUB AL,30H
- XCHG [BX],AL
- MOV AH,0AH
- MUL AH
- ADD [BX],AL
- RET
- DUMMY21:
- CMP AL,3DH
- JZ GORET5
- CMP AL,3FH
- JZ GORET5
- CMP AL,22H
- JZ DUMMY22
- CMP AL,27H
- JNZ DUMMY23
- DUMMY22:
- MOV WORD PTR [SI],OFFSET DUMMY71
- MOV L105,AL
- GORET5: RET
- DUMMY71:
- CMP AL,L105
- JNZ DUMMY24
- DEC BYTE PTR L106
- MOV WORD PTR [SI],OFFSET DUMMY70
- RET
- DUMMY24:
- CALL DUMMY43
- MOV [BX],AL
- MOV WORD PTR [SI],OFFSET DUMMY71
- JMP DUMMY25
- DUMMY23:
- MOV BX,0027H
- DUMMY26:
- ADD BX,+03
- CMP BYTE PTR [BX],00H
- JZ DUMMY27
- CMP [BX],AL
- JNZ DUMMY26
- MOV AX,[BX+01]
- MOV BX,OFFSET KBDTABLE
- INC BX
- ADD BX,LFB
- MOV DL,[BX]
- XOR DH,DH
- MOV CX,DX
- OR CX,CX
- JNZ DUMMY88
- INC CX
- DUMMY88:
- JMP AX
- DUMMY18:
- CMP AL,1BH
- JNZ DUMMY27
- MOV WORD PTR [SI],OFFSET DUMMY72
- RET
- DUMMY27:
- CALL DUMMY56
- DUMMY29:
- MOV LFD,OFFSET DUMMY18
- RET
- DUMMY32:
- CMP [BX],AH
- JZ DUMMY28
- ADD [BX],AL
- LOOP DUMMY32
- DUMMY28:
- MOV DX,WORD PTR COL
- XOR BX,BX
- MOV AH,02H
- INT 10H
- JMP DUMMY29
- DUMMY83:
- CMP CL,19H
- JA DUMMY28
- MOV AL,MAXCOL
- MOV CH,[BX+01]
- OR CH,CH
- JZ DUMMY30
- DEC CH
- DUMMY30:
- CMP AL,CH
- JA DUMMY31
- MOV CH,AL
- DUMMY31:
- XCHG CL,CH
- DEC CH
- MOV WORD PTR COL,CX
- JMP DUMMY28
- DUMMY84:
- MOV AH,MAXCOL
- MOV AL,01H
- DUMMY33:
- MOV BX,OFFSET COL
- JMP DUMMY32
- DUMMY85:
- MOV AX,OFFSET LFF
- JMP DUMMY33
- DUMMY93:
- MOV AX,OFFSET LFF
- DUMMY34:
- MOV BX,OFFSET ROW
- JMP DUMMY32
- DUMMY87:
- MOV AX,1801H
- JMP DUMMY34
- DUMMY95:
- MOV AX,WORD PTR COL
- MOV L103,AX
- JMP DUMMY28
- DUMMY89:
- MOV AX,L103
- MOV WORD PTR COL,AX
- JMP DUMMY28
- DUMMY90:
- XOR CX,CX
- XCHG L106,CL
- CALL DUMMY43
- INC CX
- LP4: MOV AL,[BX]
- PUSH BX
- MOV BX,005BH
- DUMMY86:
- MOV AH,[BX]
- ADD BX,+03H
- CMP AH,0FFH
- JZ DUMMY35
- CMP AH,AL
- JNZ DUMMY86
- MOV AX,[BX-02]
- AND FGNDCLR,AL
- OR FGNDCLR,AH
- DUMMY35:
- POP BX
- INC BX
- LOOP LP4
- JMP DUMMY28
- DUMMY91:
- XOR CX,CX
- MOV WORD PTR COL,CX
- MOV DH,19H
- DUMMY36:
- MOV DL,MAXCOL
- MOV BH,FGNDCLR
- MOV AX,0600H
- INT 10H
- JMP DUMMY28
- DUMMY92:
- MOV CX,WORD PTR COL
- MOV DH,CH
- JMP DUMMY36
- DUMMY57:
- MOV DL,0AH
- INC AL
- XOR AH,AH
- DIV DL
- ADD AX,3030H
- RET
- DUMMY94:
- MOV AL,ROW
- CALL DUMMY57
- MOV L10D,AX
- MOV AL,COL
- CALL DUMMY57
- MOV L110,AX
- MOV L108,09H
- MOV L109,OFFSET L10B
- DUMMY38:
- JMP DUMMY29
- DUMMY96:
- MOV CL,01H
- JMP SHORT DUMMY37
- DUMMY97:
- XOR CX,CX
- DUMMY37:
- MOV AL,DL
- CMP AL,07H
- JA DUMMY38
- JB DUMMY39
- MOV LFA,CL
- RET
- DUMMY39:
- MOV AH,00H
- INT 10H
- JMP DUMMY38
- DUMMY99:
- XOR DX,DX
- XCHG L106,DL
- INC DX
- INC DX
- CALL DUMMY43
- MOV AX,[BX]
- CALL DUMMY52
- JNZ DUMMY40
- MOV DI,BX
- SUB LFB,CX
- MOV SI,DI
- ADD SI,CX
- MOV CX,OFFSET INITPROC
- SUB CX,SI
- CLD
- PUSH ES
- PUSH CS
- POP ES
- REP MOVSB
- POP ES
- DUMMY40:
- CALL DUMMY43
- CMP DL,03H
- JB DUMMY41
- MOV [BX-01],DL
- ADD LFB,DX
- ADD BX,DX
- DUMMY41:
- MOV BYTE PTR [BX-01],00
- MOV LFD,OFFSET DUMMY18
- RET
- DUMMY43:
- MOV BX,LFB
- INC BX
- ADD BX,L106
- CMP BX,00C8H
- JB DUMMY42
- DEC BYTE PTR L106
- JMP DUMMY43
- DUMMY42:
- ADD BX,OFFSET KBDTABLE
- RET
- KBDTABLE:
- ADD AL,00
- JB DUMMY44
- DW 8 DUP (0)
- DUMMY44:
- DW 90 DUP (0)
-
- INITPROC:
- INT 11H
- AND AL,30H ; Check type of video card
- CMP AL,30H
- JNZ COLORCARD
- MOV VIDEOB,0B000H
- COLORCARD:
- CMP AL,10H ; 40 or 80 columns
- JA D80COLUMNS
- MOV LFF,00
- MOV MAXCOL,27H
- D80COLUMNS:
- XOR BX,BX
- MOV DS,BX
- MOV BX,4 * 1BH
- MOV WORD PTR [BX],OFFSET KEYBREAK
- MOV [BX+02],CS
- MOV BX,4 * 29H
- MOV WORD PTR [BX],OFFSET DUMMY74
- MOV [BX+02],CS
- LDS BX,CS:REQADDR
- MOV WORD PTR [BX].DEVEND,OFFSET INITPROC
- MOV WORD PTR [BX+2].DEVEND,CS
- JMP BADCOMMAND
- ;064D
- DB 51 DUP (0)
-
- ANSIDRIVER ENDS
- END